﻿// 中文注释：该文件实现了ChannelTimeLineItem类，用于在界面上绘制时间线及刻度
#include "ChannelTimeLineItem.h"

#include <QPainter>

/**
 * @brief 构造函数
 * @param minX X轴最小值（时间起始值）
 * @param maxX X轴最大值（时间结束值）
 * @param minY Y轴最小值（预留参数，当前未使用）
 * @param maxY Y轴最大值（预留参数，当前未使用）
 * @param parent 父窗口部件指针
 * 初始化时间线各项参数，包括刻度总数、基线位置和坐标轴范围
 */
ChannelTimeLineItem::ChannelTimeLineItem(int minX, int maxX, int minY, int maxY, QWidget *parent)
    :QWidget(parent),
      m_trick(100),                ///< 设置时间线总刻度数为100个
      m_timeLineTop(20),           ///< 设置时间线基线的Y坐标为20像素
      m_minXValue(minX),           ///< 保存X轴最小值（即时间起始值）
      m_maxXValue(maxX),           ///< 保存X轴最大值（即时间结束值）
      m_minYValue(minY),           ///< 保存Y轴最小值（预留参数）
      m_maxYValue(maxY)            ///< 保存Y轴最大值（预留参数）
{

}

/**
 * @brief 析构函数
 * 负责释放类中所有动态分配的资源
 * 注意：当前类未使用任何动态分配的资源，故析构函数为空
 */
ChannelTimeLineItem::~ChannelTimeLineItem()
{

}

/**
 * @brief 重绘事件处理函数
 * @param event 重绘事件对象（包含重绘区域等信息）
 * 主要功能：绘制时间线背景、基线、刻度线及时间文本
 * 实现逻辑：根据窗口宽度和时间范围计算缩放比例，确保时间线自适应窗口大小
 */
void ChannelTimeLineItem::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    // 计算X轴缩放比例 = 窗口宽度 / 时间范围（最大值）
    double xLineScale = (double)(width()) / m_maxXValue;
    // 计算每个刻度对应的实际时间间隔
    int xTrickStep = m_maxXValue / m_trick;
    // 开始原生绘制（提高绘制性能）
    painter.beginNativePainting();
    // 设置画笔颜色为白色（用于绘制基线和刻度线）
    painter.setPen(Qt::white);
    // 设置画刷颜色为黑色（用于绘制背景）
    painter.setBrush(QBrush(QColor(4,4,4)));
    // 绘制黑色背景矩形（宽度为窗口宽度，高度固定40像素）
    painter.drawRect(QRect(0,0,width(), 40));
    // 绘制时间线基线（从窗口左侧(0,m_timeLineTop)到右侧(width(),m_timeLineTop)）
    painter.drawLine(0,m_timeLineTop,width(),m_timeLineTop);
    // 循环绘制所有刻度线（共m_trick个）
    for(int i=0; i<m_trick; ++i)
    {
        // 默认刻度线高度为10像素（短刻度）
        int timeLineBottom = m_timeLineTop + 10;
        // 计算当前刻度的X坐标 = 刻度索引 * 时间间隔 * 缩放比例
        QPointF timeStartPos(i * xTrickStep * xLineScale, m_timeLineTop);
        // 每10个刻度绘制一个长刻度（20像素）和时间文本
        if(i % 10 == 0)
        {
            // 绘制时间文本（显示当前刻度对应的时间值）
            painter.drawText(timeStartPos, QString::number(i * xTrickStep));
            // 设置长刻度线高度为20像素
            timeLineBottom = m_timeLineTop + 20;
        }
        // 绘制刻度线（从基线位置到计算的底部位置）
        painter.drawLine(timeStartPos, QPointF(timeStartPos.x(), timeLineBottom));
    }
    // 结束原生绘制
    painter.endNativePainting();
}
